import axios from 'axios';
import { store } from '@/store/store.js'
import { message } from 'antd'
import { customHistory } from '@/utils'
import { logout } from '@/store/actions/login';
// 导出网络请求库实例
export const http = axios.create({
  baseURL: 'http://geek.itheima.net/v1_0',
  timeout: 5000,
});

http.interceptors.request.use(config => {
  // 获取token
  const token = store.getState().login

  // 除了登录请求外，其他请求统一添加 token
  if (!config.url.startsWith('/authorizations')) {
    config.headers.Authorization = `Bearer ${token}`
  }

  return config
})

http.interceptors.response.use(undefined, (error) => {
  // 错误处理
  console.dir(error);
  // 通用错误处理
  if (!error.response) {
    message.error('网络错误');
    return Promise.reject(error);
  }

  // token失效
  if (error.response.status === 401) {
    message.error('token 认证失败', 1.5, () => {
      // 删除旧的token, 使用登出的 action
      store.dispatch(logout());
      // 如果用户再次刷新则会自动回到登录页面
      // 不用用户刷新，自动跳转
      customHistory.push('/login', {
        from: customHistory.location.pathname,
      });
    });

    // 处理完毕后返回给 axios 做后续处理
    return Promise.reject(error);
  }
});